/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package im.filters;

import im.eventpackage.*;
import java.util.StringTokenizer;
import im.subscriptionpackage.*;
import java.util.Vector;

/**
 *
 * @author Giovanni
 */
public class TopicEventFilter {

    public TopicEventFilter() {
    }
// modificare filterSubscription(evento,sub)

    boolean searchByName(Vector content, String name) {
      
        boolean ret=false;

        int size = content.size();
        for (int i = 0; i < size; i++) {

            if (content.get(i).equals(name)) {
                ret=true;
                break;
            }
        }

        return ret;
    }

//domanda: il value dell'evento deve essere una stringa, si può modellare meglio?
    //visto che nel content based è un valore unitario che può essere altro (int float etc...)
    //soluzione possibile:altro campo keywords(o header) contente le keyword che caratterizzano l'evento
//modificare invece che contains mettere equals e gestire, in quanto non è del tutto funzionante
    public boolean filterSubscription(Event ev, TopicSubscription sub){

        boolean ret = true;

        StringTokenizer st = new StringTokenizer(sub.getKeywords());

        StringTokenizer st1 =new StringTokenizer(ev.getTopic().toString());
        Vector ve = new Vector();
        while(st1.hasMoreElements()){
            String str = st1.nextToken();
            ve.add(str);
        }

        while (st.hasMoreElements()) {

            String str = st.nextToken();

                if (searchByName(ve, str)) {
                    ret = ret&&true;
                } else {
                    ret = ret&&false;

            }

        }
        return ret;
    }

}
